#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stddef.h>
#include<string.h>

//#define OFFSETOF(type,number) (size_t)&(((type*)0)->number)
//
//struct Test
//{
//	char x;
//	int y;
//	char z;
//};
//
//void test01()
//{
//	printf("%d\n", offsetof(struct Test, x));
//	printf("%d\n", offsetof(struct Test, y));
//	printf("%d\n", offsetof(struct Test, z));
//
//}
//
//void test02()
//{
//	printf("%d\n", OFFSETOF(struct Test, x));
//	printf("%d\n", OFFSETOF(struct Test, y));
//	printf("%d\n", OFFSETOF(struct Test, z));
//}
//
//int main()
//{
//	test01();
//
//	test02();
//	return 0;
//}


//int Mystrlen(char* str)
//{
//	int n = 0;
//	while (*str++)
//	{
//		n++;
//	}
//	return n;
//}
//
//int main()
//{
//	char* str = "abcde";
//	printf("%d\n", Mystrlen(str));
//	return 0;
//}

//void Mystrcpy(char* v1,char* v2)
//{
//	while (*v1++ = *v2++);
//}
//
//int main()
//{
//	char str1[20];
//	char str2[] = "abcde";
//	Mystrcpy(str1, str2);
//	printf("%s\n", str1);
//	return 0;
//}

//int Mystrcmp(char* str1, char* str2)
//{
//	int ret;
//	while (!(ret=*str1 - *str2) && *str1 && *str2)
//	{
//		str1++;
//		str2++;
//	}
//	
//	return ret;
//}
//
//int main()
//{
//	char* str1 = "abcd";
//	char* str2 = "abc";
//	int ret = Mystrcmp(str1, str2);
//	if (ret > 0)
//	{
//		printf("str1>str2");
//	}
//	else if (ret == 0)
//	{
//		printf("str1==str2");
//	}
//	else
//	{
//		printf("str<str2");
//	}
//	return 0;
//}

char* Mystrcat(char* str1, char* str2)
{
	char* ret = str1;
	while (*str1)
	{
		str1++;
	}

	while (*str1++ = *str2++)
	{
		;
	}

	return ret;
}

int main()
{
	char str1[20] = "abc";
	char str2[6] = "defaa";

	;
	printf("%s\n", Mystrcat(str1, str2));
	return 0;
}